package com.dliu.javaleetcode;

import java.util.*;

/**
 * @author yanglei
 * date 2021/3/31 20:11
 */
public class LC0003StrLen {
    /**
     给定一个字符串，请你找出其中不含有重复字符的最长子串的长度。
     示例1:
     输入: s = "abcabcbb"
     输出: 3
     解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。

     示例 2:
     输入: s = "bbbbb"
     输出: 1
     解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。

     示例 3:
     输入: s = "pwwkew"
     输出: 3
     解释: 因为无重复字符的最长子串是"wke"，所以其长度为 3。
         请注意，你的答案必须是 子串 的长度，"pwke"是一个子序列，不是子串。
     示例 4:
     输入: s = ""
     输出: 0
      */
    public static int lengthOfLongestSubstring(String s) {
        List<Set<Character>> list = new ArrayList<>();
        int length = s.length();
        if (length == 0 || length == 1) {
            return length;
        }
        for (int i = 0; i < length; i++){
            Set<Character> set = new HashSet<>();
            set.add(s.charAt(i));
            for (int j = i + 1; j < length; j++) {
                char c = s.charAt(j);
                if (set.contains(c)) {
                    break;
                }
                set.add(c);
            }
            list.add(set);
        }
        return list.stream().max(Comparator.comparingInt(Set::size)).get().size();
    }

    public static void main(String[] args) {
//        System.out.println(LC0003StrLen.lengthOfLongestSubstring("abcabcbb"));
//        System.out.println(LC0003StrLen.lengthOfLongestSubstring("bbbbb"));
//        System.out.println(LC0003StrLen.lengthOfLongestSubstring("pwwkew"));
        System.out.println(LC0003StrLen.lengthOfLongestSubstring("a"));
    }
}
